// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package com.xiaomi.infra.galaxy.common.model;
import java.util.AbstractList;
import java.util.Arrays;
public final class CollisionCheckStack extends AbstractList
{
static final boolean $assertionsDisabled;
private Object data[];
private final int initialHash[] = new int[17];
private boolean latestPushResult;
private int next[];
private int size;
private boolean useIdentity;
public CollisionCheckStack()
{
size = 0;
latestPushResult = false;
useIdentity = true;
data = new Object[16];
next = new int[16];
}
private void expandCapacity()
{
int i = data.length;
int j = i * 2;
Object aobj[] = new Object[j];
int ai[] = new int[j];
System.arraycopy(((Object) (data)), 0, ((Object) (aobj)), 0, i);
System.arraycopy(next, 0, ai, 0, i);
data = aobj;
next = ai;
}
private boolean findDuplicate(Object obj, int i)
{
int k;
for (int j = initialHash[i]; j != 0; j = next[k])
{
k = j - 1;
Object obj1 = data[k];
if (useIdentity ? obj1 == obj : obj.equals(obj1))
{
return true;
}
}
return false;
}
private int hash(Object obj)
{
int i;
if (useIdentity)
{
i = System.identityHashCode(obj);
} else
{
i = obj.hashCode();
}
return (i & 0x7fffffff) % initialHash.length;
}
public boolean findDuplicate(Object obj)
{
return findDuplicate(obj, hash(obj));
}
public Object get(int i)
{
return data[i];
}
public String getCycleString()
{
StringBuilder stringbuilder = new StringBuilder();
int i = -1 + size();
Object obj = get(i);
stringbuilder.append(obj);
Object obj1;
do
{
stringbuilder.append(" -> ");
i--;
obj1 = get(i);
stringbuilder.append(obj1);
} while (obj != obj1);
return stringbuilder.toString();
}
public boolean getLatestPushResult()
{
return latestPushResult;
}
public boolean getUseIdentity()
{
return useIdentity;
}
public Object peek()
{
return data[-1 + size];
}
public Object pop()
{
size = -1 + size;
Object obj = data[size];
data[size] = null;
int i = next[size];
if (i < 0)
{
return obj;
}
int j = hash(obj);
if (!$assertionsDisabled && initialHash[j] != 1 + size)
{
throw new AssertionError();
} else
{
initialHash[j] = i;
return obj;
}
}
public boolean push(Object obj)
{
if (data.length == size)
{
expandCapacity();
}
data[size] = obj;
int i = hash(obj);
boolean flag = findDuplicate(obj, i);
next[size] = initialHash[i];
initialHash[i] = 1 + size;
size = 1 + size;
latestPushResult = flag;
return latestPushResult;
}
public void pushNocheck(Object obj)
{
if (data.length == size)
{
expandCapacity();
}
data[size] = obj;
next[size] = -1;
size = 1 + size;
}
public void reset()
{
if (size > 0)
{
size = 0;
Arrays.fill(initialHash, 0);
}
}
public void setUseIdentity(boolean flag)
{
useIdentity = flag;
}
public int size()
{
return size;
}
static
{
boolean flag;
if (!com/xiaomi/infra/galaxy/common/model/CollisionCheckStack.desiredAssertionStatus())
{
flag = true;
} else
{
flag = false;
}
$assertionsDisabled = flag;
}
}